﻿using System.Collections.Generic;

namespace OrbClientCacher
{
	/// <summary>
	/// Erweiterte iterierende Klasse, die durch einen internen
	/// Counter den jeweils nächsten Eintrag ermitteln und
	/// weitergeben kann.
	/// </summary>
	/// <typeparam name="T">Gibt den Typ des Payloads an</typeparam>
	public class IteratingList<T> : List<T>
	{
		/// <summary>
		/// Interner Indexzähler
		/// </summary>
		private int counter = 0;

		/// <summary>
		/// Standardkonstruktor
		/// </summary>
		public IteratingList() : base() { }
		
		/// <summary>
		/// Konstruktor der die Liste mit einer initialen Kapazität anlegt
		/// </summary>
		/// <param name="capacity"></param>
		public IteratingList(int capacity) : base(capacity) { }
		
		/// <summary>
		/// Ermittelt den nächsten Eintrag in der Liste und gibt
		/// dessen Payload zurück.
		/// </summary>
		/// <returns>Payload</returns>
		public T GetNext()
		{
			return base[this.counter++];
		}

		/// <summary>
		/// Prüft, ob in der Liste ein weiterer Eintrag existiert
		/// </summary>
		/// <returns>true, wenn es einen weiteren Eintrag in der Liste gibt</returns>
		public bool HasNext()
		{
			int c = this.counter;
			if (c < base.Count) return true;
			return false;
		}

		/// <summary>
		/// Setzt den internen Zähler auf den ersten Index zurück
		/// </summary>
		public void ResetCounter()
		{
			this.counter = 0;
		}

		/// <summary>
		/// Ermittelt den aktuellen Elementzähler auf Basis 1
		/// </summary>
		/// <returns></returns>
		public int GetCurrentElementCounter()
		{
			return this.counter + 1;
		}
	}
}
